<?php

/**
 * 数据库操作类
 */
class DBUtil
{
    var $dsn;       //pdo连接地址
    var $user;      //用户名
    var $password;  //密码
    var $db;        //pdo对象

    /**
     * 构造函数
     */
    function __construct()
    {
        $this->dsn = "mysql:host=localhost;dbname=php_shop";
        $this->user = "root";
        $this->password = "123";
        $this->db = new PDO($this->dsn, $this->user, $this->password);
    }


    /**
     * 重载方法
     *
     * @param $name
     * @param $arguments
     * @return array
     */
    function __call($name, $arguments)
    {
        if ($name == 'query') {
            switch (count($arguments)) {
                case 1:
                    return $this->query1($arguments[0], array());
                case 2:
                    return $this->query1($arguments[0], $arguments[1]);
            }
        }
    }

    /**
     * 数据库查询
     *
     * @param $sql  占位符或？sql语句
     * @param $pram sql语句中参数值数组
     * @return array    返回二维数组结果集
     */
    function query1($sql, $pram)
    {
        $stmt = $this->db->prepare($sql);
        $len = count($pram);
        if ($len != 0) {
            for ($i = 1; $i <= $len; $i++) {
//                echo $pram[$i-1];
                $stmt->bindValue($i, $pram[$i - 1]);
            }
        }
        $stmt->execute();
        $resultSet = $stmt->fetchAll();
//        echo count($resultSet);
        return $resultSet;
    }

    /**
     * 数据库的更新操作
     *
     * @param $sql  占位符或？sql语句
     * @param $pram sql语句中参数值数组
     * @return bool 成功返回true，失败返回false
     */
    function update($sql, $pram){
        $stmt = $this->db->prepare($sql);
        $len = count($pram);
        if ($len != 0) {
            for ($i = 1; $i <= $len; $i++) {
                $stmt->bindParam($i, $pram[$i - 1]);
            }
        }
        $flag = $stmt->execute();
        return $flag;
    }

    /**
     * 删除
     * @param $sql
     * @return bool
     */
    function delete($sql){
        $stmt = $this->db->prepare($sql);
        $flag = $stmt->execute();
        return $flag;
    }

    /**
     * 关闭数据库连接
     */
    function close(){
        $this->db = null;
    }

}


